package com.tanhua.recommend.listener;

import com.tanhua.model.mongo.Video;
import com.tanhua.model.mongo.VideoScore;
import org.bson.types.ObjectId;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author げっしょく
 * @date 2021/11/7
 */
@Component
public class VideoListener {

    @Autowired
    private MongoTemplate mongoTemplate;

    @RabbitListener(
            bindings = @QueueBinding(
                    value = @Queue(
                            value = "tanhua.video.queue"
                    ),
                    exchange = @Exchange(
                            value = "tanhua.log.exchange",
                            type = ExchangeTypes.TOPIC
                    ),
                    key = "log.video"
            )
    )
    public void video(Map map) {
        //解析Map集合,获得map集合中的数据
        String userId = map.get("userId").toString();
        String type = map.get("type").toString();
        String logTime = map.get("logTime").toString();
        String videoId = map.get("busId").toString();

        Video video = mongoTemplate.findById(new ObjectId(videoId), Video.class);
        //获取得分
        Double socre = 0D;
        if (video != null) {
            socre = getScore(type);

            //封装数据,存入数据库
            VideoScore videoScore = new VideoScore();
            videoScore.setDate(System.currentTimeMillis());
            videoScore.setScore(socre);
            videoScore.setUserId(Long.valueOf(userId));
            videoScore.setVideoId(video.getVid());
            mongoTemplate.save(videoScore);
        }

    }
    private static Double getScore(String type) {
        //0301为发小视频，0302为小视频点赞，0303为小视频取消点赞，0304为小视频评论
        Double score = 0d;
        switch (type) {
            case "0301":
                score=2d;
                break;
            case "0302":
                score=5d;
                break;
            case "0303":
                score = -5d;
                break;
            case "0304":
                score = 10d;
                break;
            default:
                break;
        }
        return score;
    }

}
